%% 调整图像尺寸
% 读取图片
img = imread("zyx.jpg"); % 替换为你的图片路径

% 调整图片尺寸到320x240像素
resizedImg = imresize(img, [320 240]);

% 显示原图与调整尺寸后的图片进行对比
figure;
subplot(1, 2, 1); imshow(img); title('Original Image');
subplot(1, 2, 2); imshow(resizedImg); title('Resized Image');

% 保存调整尺寸后的图片
imwrite(resizedImg, 'ZYX_320_240.jpg'); % 保存为新的文件


%% 2-1 将目标图像加载到MATLAB目录下work文件夹中，读入并显示目标图像I，
%      查看图像的基本信息及其在内存中的情况；
%      参考函数imread、imshow、imfinfo、whos 
close all; clc; clear;
I = imread("ZYX_320_240.jpg");     %读入图像
imshow(I);                         %显示图像
info = imfinfo("ZYX_320_240.jpg")  % 有关图形文件的信息
whos("I")                          % 列出工作区中的变量及大小和类型


%% 2-2 创建名为exp11.m程序文件，在文件中实现以下的图像操作：
% 在不同窗口下显示 
%           ①对图像I进行缩放处理，将其缩小为0.5倍，并在当前空间下存储名称为”exp11”的图片；
%           ②对图像I进行旋转处理，将其顺时针旋转30°，并在当前空间下存储名称为”exp12”的图片；
%           ③分别给原始图像和变换后图像赋予相应的标题名称
%           （输入图片为”原图像”、输出图像为”缩小0.5倍图像”和”旋转30°图像”），
%           并在同一个窗口中，以1行3列的方式同时显示几幅图片进行比较；
%      参考函数imresize、imrotate、imwrite、title、subplot、subimage

close all; clc; clear;
I = imread("zyx.jpg");   %读入图像  % I是已经加载的图像变量
I_resized = imresize(I, 0.5);       % 步骤①：缩小图像至0.5倍
imwrite(I_resized, 'exp11.png');    % 保存缩小后的图像
I_rotated = imrotate(I, -30, 'loose');% 步骤②：图像旋转30°
imwrite(I_rotated, 'exp12.png');    % 保存旋转后的图像

% 准备显示
% figure; % 创建一个新的图形窗口
% subplot(1, 3, 1); % 1行3列的第一个位置
imshow(I); % 显示原始图像
title('原图像'); % 添加标题

figure;
% subplot(1, 3, 2); % 1行3列的第二个位置
imshow(I_resized); % 显示缩小的图像
title('缩小0.5倍图像');  % 给缩小后的图像添加标题

figure;
% subplot(1, 3, 3); % 1行3列的第三个位置
imshow(I_rotated); % 显示旋转的图像
title('旋转30°图像');   % 给旋转后的图像添加标题

%% 2-2 在同一窗口下显示
close all; clc; clear;
I = imread("zyx.jpg");   %读入图像  % I是已经加载的图像变量
I_resized = imresize(I, 0.5);
I_rotated = imrotate(I, -30, 'loose');  %顺时针 -30°
subplot(1, 3, 1);imshow(I);title('原图像');
subplot(1, 3, 2);imshow(I_resized);title('缩小0.5倍图像');
subplot(1, 3, 3);imshow(I_rotated);title('旋转30°图像');

%% 2-3 通过交互方式将图像中的人眼和人脸区域剪切提取出来，分别存名为"eye”和”face”的新的图像，并查看眼部图片数据；
%      参考函数imcrop
close all; clc; clear;
I = imread("ZYX_320_240.jpg");
imshow(I);
eye = imcrop(I);    imwrite(eye,  'eye.jpg');   % 保存人眼图像
face = imcrop(I);   imwrite(face, 'face.jpg');  % 保存人脸图像

%% 2-4 将原始图片分别转换成HSV色彩空间下的图像、灰度图像和二值图像，并在同一窗口中， 以2行2列的方式同时显示几幅图片进行比较
% （四幅图像的标题名称分别为”原图像”、”HSV图像”、”灰度图像”、”二值图像”）； 
% 参考函数rgb2hsv、rgb2gray、im2bw、title
close all; clc; clear;
I = imread("ZYX_320_240.jpg"); % 读取原始图像
img_HSV    = rgb2hsv(I);% 转换为HSV色彩空间
img_Gray   = rgb2gray(I);% 转换为灰度图像
img_Binary = im2bw(img_Gray, 0.50125);  % 转换为二值图像，阈值：0.50125
% 创建一个2行2列的图像显示窗口
subplot(2, 2, 1); imshow(I); title('原图像');
subplot(2, 2, 2); imshow(img_HSV); title('HSV图像');
subplot(2, 2, 3); imshow(img_Gray); title('灰度图像'); % 使用[]保持灰度图的动态范围
subplot(2, 2, 4); imshow(img_Binary); title('二值图像');

%% 2-5 在原始图像中，通过交互方式，任意选取四个像素点，查看像素点的灰度
% 给出原始图片在R、G、B三个色彩空间下的图像，并在同一窗口中，
% 以2行2列的方式同时显示几幅图片进行比较
% （四幅图像的标题名称分别为”原图像”、”R图像”、”G图像”、”B图像”）；impixel
close all; clc; clear;
I = imread("zyx.jpg"); % 读取原始图像
impixel(I)  %通过交互方式，任意选取四个像素点，查看像素点的灰度
Channel_Red   = I(:, :, 1); %所有行所有列的第1个通道 R 红色
Channel_Green = I(:, :, 2); %所有行所有列的第2个通道 G 绿色
Channel_Bule  = I(:, :, 3); %所有行所有列的第3个通道 B 蓝色
subplot(2, 2, 1); imshow(I);                 title('原图像（RGB）');
subplot(2, 2, 2); imshow(Channel_Red,   []); title('红色通道');
subplot(2, 2, 3); imshow(Channel_Green, []); title('绿色通道');
subplot(2, 2, 4); imshow(Channel_Bule,  []); title('蓝色通道');


%% 2-6 将原始图片转换为灰度图片，并分别在水平和垂直方向添加颜色条，在同一个窗口中，
% 以1行3列的方式同时显示几幅图片进行比较。
% 参考函数colorbar

close all; clc; clear;
I = imread("zyx.jpg");   % 读取原始图像
imgGray = rgb2gray(I);   % 转换为灰度图像
% figure;
subplot(1, 3, 1); imshow(imgGray, []); title('灰度图像');   % 不加颜色条，保持一致性的占位
subplot(1, 3, 2); imshow(imgGray, []); title('灰度图像'); colorbar('horizontal');   % 水平颜色条
subplot(1, 3, 3); imshow(imgGray, []); title('灰度图像'); colorbar('vertical');     % 垂直颜色条



